#include "solucion.h"

using namespace std;

         Solucion::Solucion(){
	   valor = 0;
	 }

         Solucion::Solucion(list<Rectangulo> l, int v) {
            lista = l;
            valor = v;
         }
         
         Solucion::Solucion(list<Rectangulo> l) {
            lista = l;
            valor = 0;
         }
         
         void Solucion::setLista(list<Rectangulo> l) {
            lista = l;
         }
         
         list<Rectangulo> & Solucion::getLista() {
            return lista;
         }
         
         list<Rectangulo> Solucion:: copyLista () {
            list <Rectangulo>::iterator it;
            list <Rectangulo> l = lista;
            list<Rectangulo> nueva = list<Rectangulo>();
            for ( it = l.begin() ; it != l.end(); it++ ) {
               nueva.push_back(*it);
            }
            return nueva;
         }
         
         int Solucion::getValor() const{
            return valor;
         }
         
         void Solucion::setValor(int v) {
            valor = v;
         }
         
         void Solucion::calculaValor() {
            /* Hay que llamar a calcularAltura de contenedor, pero ¿cómo? */
         }
         
         
         
         bool operator < (const Solucion &s, const Solucion &t) {
            if ( s.getValor() < t.getValor())
               return true;
            return false;
         }
         
         void Solucion:: Imprimir_lista (list <Rectangulo> l) {
            list <Rectangulo>::iterator it;
            for ( it = l.begin() ; it != l.end(); it++ ) {
               cout << "Rectangulo id= " << (*it).getid() << "  h: "<< (*it).geth() << "  w: " << (*it).getw() << endl;
            }
         }
         void Solucion:: listar() {
	        cout << "Lista: ";
            list <Rectangulo>::iterator it;
            for ( it=lista.begin() ; it != lista.end(); it++ ) {
	            cout << "Rectangulo id= " << (*it).getid();
	            if ((*it).isRotado())
	               cout << "Rotado";
	            cout<< ", ";
            } 
	        cout << endl << "valor: "<< valor << endl;
	     }
	     
         /* - Miriam; Lo dejo aquí comentadito, por si nos hace faltita, aunque no lo he probado aún */
       
     /*    void sort (vector <Solucion> &s, int lo, int ho) {
            int mid, l=lo, h=ho; 
	    Solucion t;
            if (ho > lo) {
	       int mid = (lo+ho)/2;
	       t.setValor(s[mid].getValor());
               while (l < h) {
                  while ((l < ho) && (s[l].getValor() < t.getValor()))  ++l;
                  while (( h > lo) && (s[h].getValor() > t.getValor()))  --h;
                  if (l <= h) {
                     t.setValor(s[l].getValor());
		     t.setLista(s[l].getLista());
                     s[l].setValor(s[h].getValor());
		     s[l].setLista(s[h].getLista());
                     s[h].setValor(t.getValor());
		     s[h].setLista(t.getLista());
                     ++l;
                     --h;
                  }
               }º
 
               if( lo < h) sort (s,lo,h);
               if( l < ho) sort(s,l,ho);
            }
         }*/
